자바 (소프트웨어 플랫폼)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
자바(Java)는 자바 프로그래밍 언어로 개발된 프로그램을 개발하고 실행하기 위한 소프트웨어 플랫폼으로, 가상 머신, 컴파일러, 라이브러리 등을 포함한다. 자바 플랫폼은 다양한 하드웨어 및 운영 체제에서 자바 프로그램의 동일한 실행을 지원하며, 자바 카드, 자바 ME, 자바 SE, 자카르타 EE 등 여러 에디션으로 구성된다. 자바는 프로그래밍 언어이자 플랫폼의 핵심 요소로 간주되며, 오라클에 의해 관리되는 Java SE는 데스크톱, 서버, 임베디드 시스템 등에서 널리 사용된다. 자바는 오픈 소스 라이선스로 제공되지만, 보안 취약점 및 제네릭, 부호 없는 정수, 부동소수점 연산 지원의 제한, 툴바 번들 등의 비판을 받기도 한다.
더 읽어볼만한 페이지
- 자바 플랫폼 - 블루레이
블루레이 디스크는 DVD 후속 매체로, 청색 레이저를 사용하여 고화질 영상과 음향을 제공하며 HD DVD와의 경쟁 후 고밀도 광디스크 표준으로 자리 잡았으나 스트리밍 서비스 성장으로 녹화용 디스크 생산이 중단되는 추세이다. - 자바 플랫폼 - 자바 플랫폼, 마이크로 에디션
자바 ME는 임베디드 및 모바일 장치에서 자바 앱을 실행하는 플랫폼으로, 피처폰에서 주로 사용되었으며 다양한 프로파일과 에뮬레이터, 개발 도구를 제공하고 JSR을 통해 기능이 확장된다. - 공식 웹사이트에 알 수 없는 변수를 사용한 문서 - 브루클린 미술관
브루클린 미술관은 1823년 브루클린 견습생 도서관으로 시작하여 현재 약 50만 점의 소장품을 보유한 뉴욕 브루클린 소재의 미술관으로, 다양한 분야의 예술 작품을 전시하며 특히 아프리카 미술과 여성주의 미술에 대한 기여가 크다. - 공식 웹사이트에 알 수 없는 변수를 사용한 문서 - 광주지방기상청
광주지방기상청은 광주광역시와 전라남도 지역의 기상 예보, 특보, 관측, 기후 정보 제공 등의 업무를 수행하는 기상청 소속 기관으로, 1949년 광주측후소로 설치되어 1992년 광주지방기상청으로 개편되었으며, 기획운영과, 예보과, 관측과, 기후서비스과와 전주기상지청, 목포기상대를 두고 있다.
자바 (소프트웨어 플랫폼) - [IT 관련 정보]에 관한 문서 | |
---|---|
개요 | |
![]() | |
이름 | 자바 (소프트웨어 플랫폼) |
영어 | Java Platform |
개발 | |
개발자 | 제임스 고슬링, 썬 마이크로시스템즈 |
현재 개발자 | 오라클 |
출시 | |
기술 정보 | |
프로그래밍 언어 | 자바, C++, C, 어셈블리어 |
운영 체제 | 마이크로소프트 윈도우, 리눅스, macOS, 솔라리스 (구 버전) |
플랫폼 | x64, ARMv8, ARMv7, IA-32, SPARC (구 버전) |
지원 언어 | 영어, 중국어, 프랑스어, 독일어, 이탈리아어, 일본어, 한국어, 포르투갈어, 스페인어, 스웨덴어 |
장르 | 소프트웨어 플랫폼 |
라이선스 | |
라이선스 | 이중 라이선스: GNU 일반 공중 사용 허가서 버전 2 (클래스패스 예외 포함) 및 사유 소프트웨어 라이선스 |
관련 링크 | |
웹사이트 | oracle.com/java/ java.com dev.java |
자바 플랫폼 에디션 | |
에디션 종류 | 자바 카드 자바 ME (Micro) 자바 SE (Standard) 자카르타 EE (Enterprise) 자바FX (8부터 10까지는 자바 런타임 환경에 기본 포함되나 자바FX 1.x, 2.x, 그리고 11 이후로는 별도 설치) 퍼스널자바 (중단) |
최신 버전 | |
최신 버전 | {{LSR {{LSR {{LSR {{LSR {{LSR |
2. 플랫폼
자바 플랫폼은 자바 프로그래밍 언어로 작성된 프로그램을 개발하고 실행하는 데 도움이 되는 프로그램들의 모임이다. 여기에는 실행 엔진(가상 머신), 컴파일러, 그리고 라이브러리가 포함된다.[115] 자바 플랫폼은 자바 프로그램이 모든 플랫폼에서 동일하게 실행될 수 있도록 다양한 하드웨어 및 OS에 대해 구현되었다.
자바 플랫폼은 운영 체제나 하드웨어에 의존하지 않는 바이트 코드(중간 언어)로 표현된다. 따라서 자바 프로그램 실행에 필요한 가상 머신과 개발에 필요한 표준 라이브러리 세트 및 컴파일러를 개별 환경에 맞춰 만들면 자바 프로그램은 모든 환경에서 동일하게 작동한다. 자바 플랫폼은 이러한 실행 환경 및 개발 환경을 말한다.
자바 플랫폼에는 몇 가지 에디션이 있다.
- 자바 카드: 스마트 카드 및 그와 비슷한 작은 크기의 메모리 장치에서 자바 기반 애플리케이션을 안전하게 실행할 수 있도록 하는 기술이다.
- 자바 플랫폼, 마이크로 에디션 (Java ME): 휴대 전화나 임베디드 기기에 사용된다.
- 자바 플랫폼, 스탠더드 에디션 (Java SE): PC의 스탠드얼론 애플리케이션이나 다른 에디션의 기초가 된다.
- 자카르타 EE (엔터프라이즈 에디션, 구 명칭: 자바 플랫폼, 엔터프라이즈 에디션/Java EE): 웹 애플리케이션이나 웹 서비스 등 서버 측을 위한 에디션이다.
자바 플랫폼은 다양한 프로그램으로 구성되어 있으며, 각 프로그램은 전체 기능에서 완전히 다른 일부를 제공한다. 예를 들어, 자바 소스 코드를 자바 바이트 코드로 변환하는 자바 컴파일러는 자바 개발 키트(JDK)의 일부로 제공된다. 실행 환경인 자바 런타임 환경(JRE)은 일반적으로 바이트 코드를 네이티브 머신 코드로 변환하는 JIT 컴파일러로 구현된다. 또한, 자바 바이트 코드로 미리 컴파일된 대규모 라이브러리가 존재한다.[115]
2. 1. Java Development Kit (JDK)
자바 개발 키트(JDK)는 자바 소스 코드를 자바 바이트 코드로 변환하는 자바 컴파일러를 포함한다. 이 바이트 코드는 자바 가상 머신(JVM)을 위한 중간 언어이다. JDK는 자바 프로그램 개발에 필요한 도구 모음이다.[115]2. 2. Java Runtime Environment (JRE)
오라클(Oracle)에서 배포하는 자바 런타임 환경(JRE)은 독립형 JVM (HotSpot), 표준 라이브러리, 구성 도구를 포함하는 무료 소프트웨어 배포판이다. JDK 9에서 단종되기 전까지는 브라우저 플러그인도 포함되어 있었다.[12] JRE는 노트북 및 데스크톱 폼 팩터의 개인용 컴퓨터에 설치되는 가장 일반적인 자바 환경이다.오라클 BCL(Binary Code License) 계약[12]을 가진 JRE의 마지막 Critical Path Update 버전은 8u201이었고, 동일한 라이선스를 가진 마지막 Patch Set Update 버전은 8u202였다.[13][14] 라이선스 체계에 관계없이 마지막 오라클 JRE 구현은 9.0.4였다.[15]
자바 플랫폼 SE 9부터 전체 플랫폼은 모듈로 그룹화되었다.[16] 자바 SE 구현의 모듈화는 개발자가 사용자 장치에 적합한 자바 SE 구현이 있는지 여부에만 의존하는 대신, 애플리케이션을 애플리케이션에서 사용되는 모든 모듈과 함께 묶을 수 있도록 한다.[17][18][19][20]
자바 프로그램은 OS나 하드웨어에 의존하지 않는 바이트 코드 (중간 언어)로 표현된다. 따라서 자바 프로그램 실행에 필요한 가상 머신과 개발에 필요한 표준 라이브러리 세트 및 컴파일러를 개별 환경에 맞춰 만들면 자바 프로그램은 모든 환경에서 동일하게 작동한다.
실행 환경인 자바 런타임 환경 (JRE)은 일반적으로 온더플라이로 바이트 코드를 네이티브 머신 코드로 변환하는 JIT 컴파일러로 구현된다.
2. 3. 클래스 라이브러리
대부분의 현대 운영 체제(OS)는 프로그래머의 작업을 쉽게 하기 위해 재사용 가능한 방대한 양의 코드를 제공한다. 이 코드는 일반적으로 응용 프로그램이 런타임에 호출할 수 있는 동적 로드 라이브러리 형태로 제공된다. 자바 플랫폼은 특정 운영 체제에 종속되지 않기 때문에 응용 프로그램은 기존 OS 라이브러리에 의존할 수 없다. 대신, 자바 플랫폼은 현대 운영 체제에서 일반적으로 발견되는 많은 재사용 가능한 기능을 포함하는 자체 표준 클래스 라이브러리 세트를 제공한다. 대부분의 시스템 라이브러리 또한 자바로 작성되었다. 예를 들어, Swing 라이브러리는 사용자 인터페이스를 그리고 이벤트를 자체적으로 처리하여, 서로 다른 플랫폼이 구성 요소를 처리하는 방식 간의 미묘한 차이점을 제거한다.[115]자바 클래스 라이브러리는 자바 플랫폼 내에서 세 가지 목적을 수행한다. 첫째, 다른 표준 코드 라이브러리와 마찬가지로, 자바 라이브러리는 항목 목록 유지 또는 복잡한 문자열 구문 분석과 같은 일반적인 작업을 수행하기 위한 잘 알려진 일련의 기능을 프로그래머에게 제공한다. 둘째, 클래스 라이브러리는 일반적으로 하드웨어 및 운영 체제에 크게 의존하는 작업에 대한 추상 인터페이스를 제공한다. 네트워크 액세스 및 파일 액세스와 같은 작업은 종종 각 플랫폼의 고유한 구현과 밀접하게 관련되어 있다. `java.net` 및 `java.io` 라이브러리는 네이티브 OS 코드에서 추상화 계층을 구현한 다음, 자바 응용 프로그램이 해당 작업을 수행할 수 있도록 표준 인터페이스를 제공한다. 마지막으로, 일부 기본 플랫폼이 자바 응용 프로그램이 기대하는 모든 기능을 지원하지 않는 경우, 클래스 라이브러리는 대체 기능을 제공하기 위한 에뮬레이션을 통해, 또는 최소한 특정 기능의 존재 여부를 확인할 수 있는 일관된 방법을 제공하여 부재하는 구성 요소를 자연스럽게 처리하도록 작동한다.[116]
2. 4. Java Virtual Machine (JVM)
자바 플랫폼의 핵심은 자바 바이트코드 프로그램을 실행하는 "가상 머신" 개념이다. 이 바이트코드는 프로그램이 실행되는 하드웨어나 운영 체제에 관계없이 동일하다. 자바 가상 머신(JVM) 내에는 JIT(Just In Time) 컴파일러가 있는데, 실행 시에 자바 바이트코드를 네이티브 프로세서 명령어로 변환하고 실행 중에 네이티브 코드를 메모리에 캐싱한다.[95][96][97]바이트코드를 중간 언어로 사용하면 자바 프로그램이 가상 머신을 사용할 수 있는 모든 플랫폼에서 실행될 수 있다. JIT 컴파일러를 사용하면 자바 애플리케이션은 로딩 시 약간의 지연 시간이 지난 후, JIT 컴파일되어 "워밍업"되면 네이티브 프로그램만큼 빠르게 실행되는 경향이 있다. JRE 버전 1.2부터 Sun의 JVM 구현에는 인터프리터 대신 JIT 컴파일러가 포함되어 있다.
자바 프로그램은 크로스 플랫폼 또는 플랫폼 독립적이지만, 이러한 프로그램을 실행하는 JVM 코드는 그렇지 않다. 지원되는 모든 운영 플랫폼에는 자체 JVM이 있다.
JVM 명세는 구현과 관련하여 구현자에게 많은 여지를 제공한다. 자바 1.3 이후, 오라클의 JRE는 HotSpot이라는 JVM을 포함하고 있는데, 이는 고성능을 내도록 설계되었다. 코드 실행 속도를 높이기 위해 HotSpot은 적시 컴파일을 사용한다.
2. 4. 1. Generational Heap
HotSpot에서 힙은 다음과 같은 ''세대''로 나뉜다.- ''영 제너레이션''은 생성된 직후 가비지 수집되는 수명이 짧은 객체를 저장한다.
- 더 오래 유지되는 객체는 ''올드 제너레이션''(또는 ''테뉴어드 제너레이션'')으로 이동한다. 이 메모리는 최초 및 다음 가비지 수집에서 살아남은 객체가 저장되는 (두 개의) 서바이버 공간으로 세분화된다.
''퍼머넌트 제너레이션''(또는 ''permgen'')은 Java 8 이전에는 클래스 정의 및 관련 메타데이터에 사용되었다. 퍼머넌트 제너레이션은 힙의 일부가 아니었다.[24][25] ''퍼머넌트 제너레이션''은 Java 8에서 제거되었다.[26]
원래는 퍼머넌트 제너레이션이 없었고, 객체와 클래스는 동일한 영역에 함께 저장되었다. 그러나 클래스 언로딩은 객체 수집보다 훨씬 드물게 발생하므로, 클래스 구조를 특정 영역으로 이동하면 성능을 크게 향상시킬 수 있었다.[24]
3. 지원되는 언어
일반적으로 "자바"라는 단어는 자바 프로그래밍 언어를 가리킨다. 프로그래밍 언어는 "플랫폼"이라는 문구의 범위를 벗어나지만, 자바 7 이전에는 자바 프로그래밍 언어가 자바 플랫폼의 핵심 부분으로 나열되었다. 따라서 언어와 런타임은 일반적으로 단일 단위로 간주되었다. 그러나 자바 7 사양을 통해 자바 언어와 자바 가상 머신을 더 명확하게 별도의 엔터티로 취급하여 더 이상 단일 단위로 간주되지 않도록 노력했다.[21]
JVM을 대상으로 하는 많은 컴파일러 또는 인터프리터가 제3자에 의해 제작되었다. 이 중 일부는 기존 언어용이고, 다른 일부는 자바 언어의 확장용이다. 여기에는 다음이 포함된다.
- BeanShell – 자바용 경량 스크립팅 언어[22] (JShell 참조)
- 세일론 – 불변성에 중점을 둔 객체 지향적이며 강력하고 정적으로 형식화된 프로그래밍 언어 (2023년부터 더 이상 유지 관리되지 않음)
- 클로저 – 자바 플랫폼의 현대적이고 동적이며 함수형 방언인 Lisp 프로그래밍 언어
- 고수 – 아파치 라이선스 2.0에 따라 출시된 범용 JVM 기반 프로그래밍 언어
- 그루비 – Python, Ruby, Perl 및 Smalltalk의 기능을 갖춘 완전한 자바 상호 운용 가능한 자바 구문 호환 정적 및 동적 언어
- JRuby – 루비 인터프리터
- Jython – 파이썬 인터프리터
- 코틀린 – 완전한 자바 상호 운용성을 갖춘 JVM용 (예: 데스크톱 및 iOS와 같은 비 JVM) 프로그래밍 언어 (Android용 Google에서 선호하는 언어이며, 이전에는 지원했었던 자바보다 선호되고 여전히 지원됨)
- Rhino – 자바스크립트 인터프리터
- 스칼라 – "더 나은 자바"로 설계된 자바 호환 구문을 사용하지 않는 다중 패러다임 프로그래밍 언어
- AspectJ - 관점 지향 프로그래밍을 실현할 수 있는 Java
- Generic Java영어 - 이것은 Java SE 5.0에 정식으로 Java에 통합되었다.
- 포트리스
- Kawa - Lisp 방언 중 하나인 Scheme 인터프리터
- 프로세싱
4. 역사
자바 플랫폼과 언어는 1990년 12월 썬 마이크로시스템즈의 내부 프로젝트로 시작되었으며, C/C++ 프로그래밍 언어를 대체할 수 있는 대안을 제공했다.[29] 엔지니어 패트릭 노튼은 썬의 C++와 C 응용 프로그래밍 인터페이스(API) 등에 대해 점점 더 좌절감을 느꼈고, 스콧 맥닐리에게 썬을 떠나 NeXT로 이사할 계획이라고 알렸다. 맥닐리는 그에게 회사 문제를 해결하는 방법에 대한 이메일을 보내라고 요청했고, 노튼은 소규모 팀을 만드는 것을 구상했다. 맥닐리는 이 메시지를 썬의 다른 사람들에게 전달했고, '스텔스 프로젝트'가 시작되었다.[29]
스텔스 프로젝트는 곧 '그린 프로젝트'로 이름이 바뀌었고, 제임스 고슬링과 마이크 쉐리던이 노튼에 합류했다. 그들은 캘리포니아주 멘로 파크의 샌드 힐 로드에 있는 작은 사무실에서 작업을 시작했다.[30] 그들은 썬이 주요 새로운 기회를 제공할 것으로 기대하는 차세대 스마트 기기를 프로그래밍하기 위한 새로운 기술을 개발하는 것을 목표로 했다.[30]
팀은 원래 C++를 사용하는 것을 고려했지만, 여러 가지 이유로 거부했다. 제한된 자원을 가진 임베디드 시스템을 개발하고 있었기 때문에 C++가 너무 많은 메모리를 필요로 하고, 복잡성으로 인해 개발자 오류가 발생한다고 결정했다. 이 언어에 가비지 컬렉션이 없다는 것은 프로그래머가 시스템 메모리를 수동으로 관리해야 함을 의미했는데, 이는 어렵고 오류가 발생하기 쉬운 작업이었다. 팀은 또한 C++ 언어에 보안, 분산 프로그래밍, 스레딩에 대한 이식 가능한 기능이 부족하다는 점에 대해 우려했다. 마지막으로, 그들은 모든 유형의 장치로 쉽게 이식할 수 있는 플랫폼을 원했다.
빌 조이는 Mesa와 C를 결합한 새로운 언어를 구상했다. 그는 "Further"라는 논문에서 썬의 엔지니어들이 C++를 기반으로 하는 객체 지향 프로그래밍 환경을 만들어야 한다고 제안했다. 처음에 고슬링은 C++를 수정하고 확장하려고 시도했지만, 곧 새로운 언어를 만드는 쪽으로 방향을 바꾸었다. 그는 자신의 사무실 바로 밖에 서 있던 나무를 따서 '오크'라고 불렀다.[31]
1992년 여름까지 팀은 그린 운영 체제, 오크 언어, 라이브러리 및 하드웨어를 포함한 새로운 플랫폼의 일부를 시연할 수 있었다. 1992년 9월 3일에 있었던 첫 번째 시연은 개인 휴대 정보 단말기(PDA) 장치인 ''스타7(Star7)''을 구축하는 데 중점을 두었다.[32] 그해 11월, 그린 프로젝트는 썬 마이크로시스템즈의 완전 자회사인 ''퍼스트퍼슨''으로 분사되었고, 팀은 캘리포니아주 팔로 알토로 이전했다.[32] 퍼스트퍼슨 팀은 고도로 상호 작용하는 장치를 만드는 데 관심을 가졌고, 타임 워너가 제안 요청을 셋톱 박스에 대해 발표하자, 퍼스트퍼슨은 목표를 바꾸어 셋톱 박스 플랫폼에 대한 제안으로 대응했다. 그러나 케이블 TV 업계는 그들의 플랫폼이 사용자에게 너무 많은 제어 권한을 부여한다고 생각했고, 그래서 퍼스트퍼슨은 실리콘 그래픽스(SGI)에 입찰에서 패했다. 3DO 컴퍼니와의 셋톱 박스에 대한 추가 계약도 성사되지 못했다. 텔레비전 업계에서 관심을 끌지 못해 회사는 다시 썬으로 편입되었다.
1994년 6월과 7월, 존 게이지(썬의 과학 담당 이사)와 고슬링, 조이, 노튼, 웨인 로싱, 에릭 슈미트와 3일간의 브레인스토밍을 거친 후, 팀은 플랫폼을 월드 와이드 웹을 목표로 재설정했다. 그들은 모자이크와 같은 그래픽 웹 브라우저의 등장으로 인터넷이 케이블 TV를 위해 그들이 구상했던 것과 같은 고도로 상호작용적인 매체로 발전할 수 있다고 생각했다. 노튼은 프로토타입으로 작은 브라우저인 WebRunner를 작성했으며, 1995년에 HotJava로 이름을 변경했다.[30]
썬은 상표 검색 결과 Oak Technology가 ''Oak''라는 이름을 사용하고 있다는 사실을 발견한 후, Oak 언어의 이름을 ''Java''로 변경했다.[33] 썬은 시장 점유율을 높이기 위해 Java 라이선스 가격을 원가 이하로 책정했다.[34] Java 1.0a가 1994년에 다운로드 가능하게 되었지만, HotJava 브라우저가 포함된 Java의 첫 번째 공개 릴리스인 Java 1.0a2는 1995년 5월 23일에 썬월드 컨퍼런스에서 게이지에 의해 발표되었다. 게이지의 발표에 이어, 넷스케이프 커뮤니케이션즈의 부사장인 마크 앤드리슨은 넷스케이프 브라우저가 Java를 지원할 것이라고 예기치 않게 발표했다. 1996년 1월 9일, 썬 마이크로시스템즈는 기술 개발을 위해 JavaSoft 그룹을 설립했다.[35]
웹 브라우저용 Java 애플릿은 더 이상 Java의 가장 인기 있는 사용 사례가 아니며(주로 서버 측에서 사용됨), 클라이언트 측에서 코드를 실행하는 가장 인기 있는 방법도 아니다(JavaScript가 더 인기를 얻음). 그럼에도 불구하고 TeaVM을 사용하여 JVM 지원이 중단된 후에도 웹 브라우저에서 Java(또는 Kotlin과 같은 다른 JVM 언어)를 실행하는 것이 가능하다.
자바의 성공과 그 개념인 한 번 작성, 어디서나 실행은 2002년에 등장한 .NET Framework 플랫폼 등 다른 유사한 시도를 이끌었으며, 이는 자바의 성공적인 측면을 많이 받아들였다. 그러나 .NET의 완전한 구현은 마이크로소프트 윈도우만을 대상으로 한다. 반면, 자바는 많은 플랫폼에서 완벽하게 지원된다. .NET은 많은 서로 다른 프로그래밍 언어를 공통 중간 언어로 컴파일하는 언어 독립적인 라이브러리의 사용성에 중점을 두고 있어 언어 독립적인 호환성 측면에서 자바보다 성공적이다. 하지만 자바에도 스칼라, Jython, Groovy, JRuby 등 JavaVM을 실행 플랫폼으로 하는 언어 처리계가 여러 개 존재한다.
.NET에는 Visual J#이라는 자바 구현이 존재하지만, 이는 본가 자바와 호환되지 않으며, 관련 클래스 라이브러리는 거의 언어 버전이 오래된 '''JDK 1.1'''을 기반으로 한다. 이는 Visual J#가 .NET의 주요 언어로 설계된 것이 아니라, 자바에서 .NET 플랫폼으로 마이그레이션하기 위해 준비된 언어이기 때문이다.
최근에는 오픈 소스 커뮤니티에 의해 IKVM.NET이라는 공통 언어 런타임에서 동작하는 자바 가상 머신이 등장하여 일방적이긴 하지만, 호환성 및 상호 이용성이 급격히 향상되고 있다.
자바 언어는 1996년 1월 23일에 자바 개발 키트(JDK) 1.0이 출시된 이후 여러 번 변경되었으며, 표준 라이브러리에 수많은 클래스와 패키지가 추가되었다. J2SE 1.4 이후 자바 커뮤니티 프로세스(JCP)가 자바 언어의 발전을 관리해 왔으며, JCP는 ''자바 사양 요청''(JSR)을 사용하여 자바 플랫폼에 대한 추가 및 변경 사항을 제안하고 명시한다. ''자바 언어 사양''(JLS)은 언어를 명시하며, JLS에 대한 변경 사항은 JSR 901에 따라 관리된다.[38]
자바 버전 | 연도 | 변경 사항 |
---|---|---|
23 | 2024 | |
21 | 2023 | 장기 지원(LTS) 릴리스 |
17 | 2021 | LTS 릴리스, switch 문에 대한 패턴 일치와 봉인된 클래스 제공 |
16 | 2021 | 레코드 클래스, 패턴 일치, 봉인된 클래스 도입 (데이터 모델링 기능 향상) |
15 | 2020 | 텍스트 블록, 봉인된 클래스 도입 (문자열 및 클래스 처리 향상, 미리 보기 기능) |
14 | 2020 | 레코드 클래스와 instanceof의 패턴 일치 도입 (미리 보기 기능) |
13 | 2019 | 텍스트 블록, 레거시 소켓 API 재구현 |
12 | 2019 | 스위치 표현식, 새로운 Shenandoah 가비지 수집기 도입 |
11 | 2018 | LTS 릴리스, 새로운 HTTP 클라이언트 도입, Java EE 및 CORBA 모듈 제거 |
10 | 2018 | 지역 변수 형식 추론(var) 도입 (형식 지정 없이 지역 변수 선언 허용) |
9 | 2017 | Java Platform Module System(JPMS) (애플리케이션 모듈화), JShell 대화형 Java REPL 도입 |
8 | 2014 | 람다 표현식, 새로운 날짜 및 시간 API 도입 (생산성 향상) |
7 | 2011 | try-with-resources, 문자열 스위치, 다이아몬드 연산자 도입, 확장된 예외 처리, 새로운 파일 I/O 라이브러리(NIO.2) 포함 |
6 | 2006 | 스크립팅 언어 지원(JSR 223), 웹 서비스 향상, JDBC 4.0 제공 (SQL XML 지원) |
5 | 2004 | 제네릭, 향상된 for 루프, 오토박싱/언박싱, 정적 임포트, 가변 인자, 열거형, 주석 포함 |
4 | 2002 | 정규 표현식, 예외 체이닝, NIO(New Input/Output) 도입, 새로운 로깅 API |
3 | 2000 | HotSpot JVM 포함, Java Naming and Directory Interface(JNDI), Java Platform Debugger Architecture(JPDA) 도입 |
2 | 1998 | 컬렉션 프레임워크, Java 문자열 메모리 맵(상수), Just In Time (JIT) 컴파일러, Swing API(GUIs용) 도입 |
1.1 | 1997 | 내부 클래스, 반사, Java Beans, JDBC API(데이터베이스 액세스용) 도입 |
1.0 | 1996 | 자바 프로그래밍 언어의 첫 번째 버전, 객체 지향 프로그래밍과 바이트코드를 도입하여 크로스 플랫폼 지원 |
4. 1. GNU General Public License
2006년 11월 13일, 썬 마이크로시스템즈는 자바 구현의 대부분을 GNU 일반 공중 사용 허가서(GPL)에 따라 공개했다.[36][37]
썬 마이크로시스템즈(Sun Microsystems)는 2006년 JavaOne에서 자바가 자유 소프트웨어 및 오픈 소스 소프트웨어가 될 것이라고 발표했으며,[70] 2006년 10월 25일 오라클(Oracle) OpenWorld 컨퍼런스에서 조나단 I. 슈워츠(Jonathan I. Schwartz)는 핵심 자바 플랫폼을 30~60일 이내에 자유 및 오픈 소스 소프트웨어로 출시할 것이라고 발표했다.[71]
썬은 2006년 11월 13일 GNU GPL에 따라 자바 핫스팟 가상 머신과 컴파일러를 자유 소프트웨어로 출시했으며, 나머지 JDK (JRE 포함)는 2007년 3월까지 GPL 하에 배치될 것이라고 약속했다 ("썬이 GPL에 따라 배포 가능한 소스 형태로 게시할 권한이 없는 몇 가지 구성 요소 제외").[72] 리처드 스톨만(Richard Stallman)에 따르면, 이것은 "자바 트랩"의 종말을 의미했다.[73] 마크 셔틀워스(Mark Shuttleworth)는 초기 언론 발표를 "자유 소프트웨어 커뮤니티에게 진정한 이정표"라고 불렀다.[74]
썬은 클래스 라이브러리의 소스 코드를 2007년 5월 8일 GPL에 따라 출시했다. 단, 써드파티로부터 썬이 라이선스를 받은 일부 제한적인 부분은 자유 소프트웨어 및 오픈 소스 라이선스로 코드를 공개하는 것을 원치 않았다.[75] 일부 제한된 부분은 글꼴 렌더링 및 2D 래스터화와 같은 플랫폼의 핵심 부분임이 밝혀졌지만, 이후 썬에 의해 오픈 소스로 출시되었다 (OpenJDK 클래스 라이브러리 참조).
썬의 목표는 독점적이고 폐쇄적인 부분을 대체 구현으로 교체하고 클래스 라이브러리를 완전히 자유롭고 오픈 소스로 만드는 것이었다. 그동안 IcedTea라는 써드파티 프로젝트는 제한된 코드를 스텁 또는 GNU Classpath의 코드로 대체하여 완전히 자유롭고 매우 유용한 JDK를 만들었다. 그러나 OpenJDK는 이후 제한된 부분 없이 빌드할 수 있게 되었고 (OpenJDK 6 b10[76]부터) 대부분의 리눅스 배포판에서 기본 런타임 환경이 되었다.[77][78][79][80]
2008년 6월, IcedTea6 (페도라 리눅스(Fedora Linux) 9에서 OpenJDK의 패키지 버전)가 기술 호환성 키트 테스트를 통과했으며 완전한 자바 6 구현이라고 주장할 수 있다고 발표되었다.[81]
OpenJDK는 GPL 하에 있으므로, 최종 사용자 (또는 시스템 관리자)가 각 시스템에 독점적인 오라클(Oracle) JRE의 올바른 버전을 다운로드하여 설치하도록 요구하는 대신, 사용자 지정 버전의 JRE를 소프트웨어 응용 프로그램과 함께 직접 재배포할 수 있다.[82][83]